package com.itheima.proxy;


import com.itheima.service.Impl.UserserviceImpl;
import org.junit.Test;
import org.springframework.cglib.proxy.Enhancer;
import org.springframework.cglib.proxy.MethodInterceptor;
import org.springframework.cglib.proxy.MethodProxy;

import java.lang.reflect.Method;

public class ProxyDemo {
    final UserserviceImpl userservice = new UserserviceImpl();

    @Test
    public void test() {

        //创建动态代理对象
        /**
         * cglib动态代理对象,基于父类
         * Enhancer
         * 创建代理对象的方法create()
         *1参:代理目标对象的字节码对象
         *2参:拦截执行的方法对象
         */
        UserserviceImpl us1 =(UserserviceImpl) Enhancer.create(userservice.getClass(), new MethodInterceptor() {
            /**
             *
             * @param o 代理对象
             * @param method  执行目标对象上的方法对象
             * @param objects   参数
             * @param methodProxy
             * @return
             * @throws Throwable
             */
            public Object intercept(Object o, Method method, Object[] objects, MethodProxy methodProxy) throws Throwable {

                System.out.println("开启事务");
                method.invoke(userservice,objects);
                return null;
            }
        });
        us1.findAll();
    }
}
